import axios from 'axios';
import store from '@/store';
import router from '@/router';

// 创建axios实例
const service = axios.create({
  baseURL: '/prod-api',
  timeout: 15000,  // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
});

// 请求拦截器
service.interceptors.request.use(
  config => {
   
    return config;
  },
  error => {
    // 处理请求错误
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data;
    
    // 这里可以根据自己的业务逻辑进行修改
    // 假设接口返回的数据结构为 { code, data, message }
    if (res.code === 0 || res.code === 200) {
      return res;
    } else {
      // 处理业务错误
      const errorMessage = res.message || '未知错误';
      
      
      
      return Promise.reject(new Error(errorMessage));
    }
  },
  error => {
    // 处理HTTP错误
    let errorMessage = '网络错误';
    
    if (error.response) {
      // 请求已发出，但服务器响应的状态码不在 2xx 范围内
      const status = error.response.status;
      
      switch (status) {
        case 400:
          errorMessage = '请求错误';
          break;
        case 401:
          errorMessage = '未授权，请登录';
          // 未登录或token过期
          store.dispatch('user/logout').then(() => {
            router.push('/login');
          });
          break;
        case 403:
          errorMessage = '拒绝访问';
          break;
        case 404:
          errorMessage = '请求的资源不存在';
          break;
        case 500:
          errorMessage = '服务器内部错误';
          break;
        default:
          errorMessage = `请求失败: ${status}`;
      }
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      errorMessage = '网络连接错误，请检查网络';
    } else {
      // 在设置请求时发生了一些错误
      errorMessage = '请求配置错误';
    }
    
    console.error('请求错误:', errorMessage);
    return Promise.reject(error);
  }
);

// 封装HTTP方法
export const http = {
  get(url, params) {
    return service.get(url, { params });
  },
  post(url, data) {
    return service.post(url, data);
  },
  put(url, data) {
    return service.put(url, data);
  },
  delete(url, params) {
    return service.delete(url, { params });
  },
  // 上传文件
  upload(url, file, onUploadProgress) {
    const formData = new FormData();
    formData.append('file', file);
    
    return service.post(url, formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      },
      onUploadProgress
    });
  },
  // 下载文件
  download(url, params, filename) {
    return service.get(url, {
      params,
      responseType: 'blob'
    }).then(response => {
      // 创建blob链接并下载
      const blob = new Blob([response]);
      const link = document.createElement('a');
      link.href = window.URL.createObjectURL(blob);
      link.download = filename || 'download';
      link.click();
      window.URL.revokeObjectURL(link.href);
    });
  }
};

// 默认导出
export default service;
